// 测试资源计数的准确性

#include <gtest/gtest.h>
#include <semaphore.h>
#include <thread>
#include <atomic>

TEST(SemaphoreTest, BasicOperation) {
    std::counting_semaphore<3> sem(3); // 初始资源计数为3

    std::atomic<int> resource_count = 3;

    auto task = [&sem, &resource_count]() {
        sem.acquire();  // 获取资源
        --resource_count;  // 资源计数减1
        std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 模拟工作
        ++resource_count;  // 资源计数加1
        sem.release();  // 释放资源
    };

    std::thread t1(task);
    std::thread t2(task);
    std::thread t3(task);

    t1.join();
    t2.join();
    t3.join();

    // 检查最终资源计数是否恢复到初始值
    EXPECT_EQ(resource_count.load(), 3);
}